package com.kolon.framework.util;

/**
<pre>
PageUtil pageNavigator = new PageUtil(
	page						- 현재 페이지 번호
	,contextPath				- 컨텍스트 패스
	,"/xxx/xxxL.do"				- URL
	,pagePerBlock				- 블럭당 페이지 수
	,recordPerPage				- 페이지당 레코드 수
	,totalCount					- 레코드의 총 수
	,""							- 파라미터
</pre>
**/
public class PageUtil {
	
	/** 전체 레코드 수 */
	private int totalRecord;
	/** 페이지당 레코드 수 */
	private int recordPerPage;
	/** 블럭당 페이지 수 */
	private int pagePerBlock;
	/** 현재 페이지 번호 */
	private int currentPage;
	/** URL */
	private String goUrl;
	/** 파라미터 */
	private String parameter;
	/** 맨 앞 << 이미지 */
	private String imgFirst = "/images/btn_back01.gif";
	/** 뒤 < */
	private String imgBack = "/images/btn_back.gif";
	/** 앞 > */
	private String imgNext = "/images/btn_next.gif";
	/** 맨 뒤 >> */
	private String imgEnd = "/images/btn_next01.gif";
	/** 총 페이지수 */
	private int totalNumOfPage;

	public PageUtil(){}
	
	/**
	 * 생성자
	 * @param currentPage 	- 현재 페이지 번호
	 * @param contextPath	- 컨텍스트 패스
	 * @param goUrl 		- 목록 액션 URL
	 * @param pagePerBlock 	- 페이지당 블록 수
	 * @param recordPerPage - 한 페이지당 목록 수
	 * @param totalRecord 	- 총 레코드 수
	 * @param parameter 	- 파라미터
	 */
	public PageUtil (int currentPage, String contextPath, String goUrl, 
			int pagePerBlock, int recordPerPage, int totalRecord, String parameter){
		super();
		this.currentPage = currentPage;
		this.goUrl = contextPath + goUrl;
		this.pagePerBlock = pagePerBlock;
		this.recordPerPage = recordPerPage;
		this.totalRecord = totalRecord;
		this.parameter  = parameter;
		this.imgFirst = contextPath + this.imgFirst;
		this.imgBack = contextPath + this.imgBack;
		this.imgNext = contextPath + this.imgNext;
		this.imgEnd = contextPath + this.imgEnd;
	}
	
	/**
	 * 페이지 네비게이터 생성
	 * @return 네비게이터 HTML 
	 */
	public String getMakePage() {
		
		if(totalRecord == 0) return "&nbsp;";
		
		totalNumOfPage = (totalRecord % recordPerPage == 0) ? 
				totalRecord / recordPerPage :
				totalRecord / recordPerPage + 1;
		
		int totalNumOfBlock = (totalNumOfPage % pagePerBlock == 0) ?
				totalNumOfPage / pagePerBlock :
				totalNumOfPage / pagePerBlock + 1;
		
		int currentBlock = (currentPage % pagePerBlock == 0) ? 
				currentPage / pagePerBlock :
				currentPage / pagePerBlock + 1;
		
		int startPage = (currentBlock - 1) * pagePerBlock + 1;
		int endPage = startPage + pagePerBlock - 1;
		
		if(endPage > totalNumOfPage)
			endPage = totalNumOfPage;
		
		boolean isNext = false;
		boolean isPrev = false;
		
		if(currentBlock < totalNumOfBlock)
			isNext = true;
		if(currentBlock > 1)
			isPrev = true;
		if(totalNumOfBlock == 1){
			isNext = false;
			isPrev = false;
		}
		
		StringBuffer sb = new StringBuffer();
		
		if(currentPage > 1){
			sb.append("<a href=\"").append(goUrl);
			sb.append("?page=1").append(parameter).append("\" title=\"<<\"><img src=\"").append(imgFirst).append("\" style=\"vertical-align: middle;\" border=\"0\" alt=\"<<\"></a>&nbsp;");
		}
		
		if (isPrev) {
			int goPrevPage = startPage - pagePerBlock;			
			sb.append("<a href=\"").append(goUrl);
			sb.append("?page=").append(goPrevPage).append(parameter).append("\" title=\"<\"><img src=\"").append(imgBack).append("\" style=\"vertical-align: middle;\" border=\"0\" alt=\"<\"></a>");
		} else {
			
		}

		for (int i = startPage; i <= endPage; i++) {
			sb.append("&nbsp;<font style=\"font-size:12px;\" color=\"d0d0d0\">|</font>&nbsp;");
			if (i == currentPage) {
				sb.append("<font color=\"red\" style=\"font-family:sans-serif;\"><b>").append(i).append("</b></font> ");
			} else {
				sb.append("<a href=\"").append(goUrl);
				sb.append("?page=").append(i).append(parameter).append("\" title=\""+i+"\">").append(i).append(
						"</a>");
			}
		}
		sb.append("&nbsp;<font style=\"font-size:12px;\" color=\"d0d0d0\">|</font> ");

		if (isNext) {
			int goNextPage = startPage + pagePerBlock;

			sb.append("<a href=\"").append(goUrl);
			sb.append("?page=").append(goNextPage).append(parameter).append("\" title=\">\"><img src=\"").append(imgNext).append("\" style=\"vertical-align: middle;\" border=\"0\" alt=\">\"></a>");
		} else {
			
		}
		
		if(totalNumOfPage > currentPage){
			sb.append("<a href=\"").append(goUrl);
			sb.append("?page=").append(totalNumOfPage).append(parameter).append("\" title=\">>\"><img src=\"").append(imgEnd).append("\" style=\"vertical-align: middle;\" border=\"0\" alt=\">>\"></a>");
		}

		return sb.toString();
		
	}
	
	public int getTotalRecord() {
		return totalRecord;
	}
	public void setTotalRecord(int totalRecord) {
		this.totalRecord = totalRecord;
	}
	public int getRecordPerPage() {
		return recordPerPage;
	}
	public void setRecordPerPage(int recordPerPage) {
		this.recordPerPage = recordPerPage;
	}
	public int getPagePerBlock() {
		return pagePerBlock;
	}
	public void setPagePerBlock(int pagePerBlock) {
		this.pagePerBlock = pagePerBlock;
	}
	public int getCurrentPage() {
		return currentPage;
	}
	public void setCurrentPage(int currentPage) {
		this.currentPage = currentPage;
	}
	public String getGoUrl() {
		return goUrl;
	}
	public void setGoUrl(String goUrl) {
		this.goUrl = goUrl;
	}
	public String getParameter() {
		return parameter;
	}
	public void setParameter(String parameter) {
		this.parameter = parameter;
	}
	public void setTotalNumOfPage(int totalNumOfPage) {
		this.totalNumOfPage = totalNumOfPage;
	}
	public int getTotalNumOfPage() {
		return totalNumOfPage;
	}
}
